package pers.cz.postgirl.core.enums;

import pers.cz.jefconfig.config.ConfigItem;

public enum KafkaConfigItem implements ConfigItem {

    /**
     * kafka服务器地址也就是broker地址清单
     */
    KAFKA_HOST,

    /**
     * key值序列化方式
     */
    KAFKA_KEY_SERIALIZER,

    /**
     * value值序列化方式
     */
    KAFKA_VALUE_SERIALIZER,

    /**
     * ack机制:
     * acks = 0： 相当于异步操作，Producer 不需要Leader给予回复，发送完就认为成功，继续发送下一条消息。这个机制下延迟最低，但是持久性可靠性也最差，当服务器发生故障时，很可能发生数据丢失。
     *
     * acks = 1： Kafka 默认的设置。表示 Producer 要 Leader 确认已成功接收数据才发送下一条消息。不过 Leader 宕机，Follower 尚未复制的情况下，数据就会丢失。这个机制提供了比较好的持久性和较低的延迟性。
     *
     * acks = -1： Leader 接收到消息之后，还必须要求ISR列表里跟Leader保持同步的那些Follower都确认消息已同步，Producer 才发送下一条消息。此机制持久性可靠性最好，但延时性最差。
     *
     */
    KAFKA_ACKS,

    /**
     * 重试次数
     */
    KAFKA_RETRIES,

    /**
     * 该参数指定了一个批次可以使用的内存大小，按照字节数计算，而不是消息个数
     */
    KAFKA_BATCH_SIZE,

    /***
     * 该参数指定了生产者在发送批次之前等待更多消息加入批次的时间。KafkaProducer会在批次填满或linger.ms达到上限时把批次发送出去。默认情况下，只要有可用的线程，就算批次里只有一个消息，生产者也会把消息发送出去。把linger.ms设置成大于0的数，让生产者在发送批次前等一会，使更多的消息加入这个批次，这样做会增加延迟，但也会提高吞吐量
     */
    KAFKA_LINGER_MS,

    /**
     * 该参数用来设置生产者内存缓冲区的大小，生产者用它缓冲要发送到服务器的消息。如果应用程序发送消息的速率比写入kafka的速度要快，会导致生产者空间不足。这个时候，send()方法调用要么被阻塞，要么抛出异常，取决于如何设置max.block.ms,表示在抛出异常之前可以阻塞一段时间。
     *
     */
    KAFKA_BUFFER_MEMORY,

    KAFKA_TOPIC

}
